package cn.itcast.nems.journal.service;

import cn.itcast.nems.common.PageQueryModel;
import cn.itcast.nems.journal.dto.JournalRefundModel;
import cn.itcast.nems.order.dao.entity.JournalRefundFinance;
import cn.itcast.nems.order.dao.entity.JournalRefundRollback;
import cn.itcast.nems.studentrecord.dto.refund.JournalRefundRollbackDTO;
import cn.itcast.nems.studentrecord.dao.dataobject.JournalRefundDO;
import cn.itcast.nems.order.dao.entity.JournalRefund;
import cn.itcast.nems.studentrecord.dto.refund.JournalRefundDTO;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;

/**
 * <p>
 * 退费凭单-头 服务类
 * </p>
 *
 * @author 刘曙
 * @since 2024-02-29
 */
public interface JournalRefundService extends IService<JournalRefund> {
    
    /**
     * <p>
     * 校验支付单号唯一性
     * </p>
     *
     * @author zhouwei
     * @since 2024/4/10 10:33 AM
     * @return Boolean 如果不存返回 true ,否则返回 false
     **/
    Boolean checkPaymentNoUnique(String paymentNo) ;

    /**
     * <p>
     * 将退费退回记录同步至老EMS
     * </p>
     *
     * @param refund 退费凭单
     * @param journalRefundFinance 审批补充表单
     * @param refundRollback 退费退回
     * @author zhouwei
     * @since 2024/4/5 4:11 PM
     **/
    void syncToEMS(JournalRefund refund, JournalRefundFinance journalRefundFinance, JournalRefundRollback refundRollback) ;

    void testFinish (String formId) ;
    /**
     * <p>
     * 凭单分页查询
     * </p>
     *
     * @param queryModel 查询参数
     * @return 分页结果
     * @author zhouwei
     * @since 2023/12/14 11:18 AM
     **/
    IPage<JournalRefundDO> findPageList(PageQueryModel<JournalRefundModel> queryModel);

    /**
     * <p>
     * 新建/提交凭单
     * </p>
     *
     * @param refundDTO 页面凭单参数
     * @return 凭单ID
     * @author zhouwei
     * @since 2023/12/12 7:09 PM
     **/
    String create(JournalRefundDTO refundDTO);

    /**
     * <p>
     * 新建退学退回
     * </p>
     *
     * @author zhouwei
     * @since 2024/4/1 5:35 PM
     **/
    Boolean addRollback(JournalRefundRollbackDTO refundRollbackDTO);
    
    /**
     * <p>
     *  保存草稿/提交凭单
     * </p>
     *
     * @author zhouwei
     * @since 2024/3/28 5:36 PM
     **/
    Boolean update(JournalRefundDTO refundDTO ) ; 

    /**
     * <p>
     * 根据ID查询凭单详情
     * </p>
     *
     * @param id 重读凭单ID
     * @return 凭单详情（ID、转出班级、重读班级、重读金额等  ）
     * @author zhouwei
     * @since 2023/12/15 9:28 AM
     **/
    JournalRefundDTO findById(String id);

    /**
     * 提交
     *
     * @param id 重读凭单ID
     **/
    Boolean flow(String id);

    /**
     * <p>
     * 删除凭单
     * </p>
     *
     * @param id 凭单ID
     * @author zhouwei
     * @since 2023/12/13 7:41 PM
     **/
    Boolean delete(String id);

    /**
     * <p>
     * 根据学籍查询退费凭单
     * </p>
     *
     * @param studentRecordId 学籍ID
     * @author zhouwei
     * @since 2024/3/18 11:38 AM
     **/
    JournalRefundDO queryRefundJournalByStudentRecordId(String studentRecordId) ;

}
